#!/usr/bin/env python3
"""
多模型管理功能演示脚本
展示如何使用新实现的模型管理器、模型评估器和智能模型选择器
"""

import asyncio
from src.research_core.model_manager import ModelManager, ModelType
from src.research_core.model_evaluator import ModelEvaluator
from src.research_core.intelligent_model_selector import IntelligentModelSelector


async def demo_model_manager():
    """演示模型管理器功能"""
    print("=== 模型管理器功能演示 ===")
    
    # 获取模型管理器实例
    manager = ModelManager()
    
    # 列出所有可用模型
    print("1. 可用模型列表:")
    models = manager.list_models()
    for model_type, model_name in models.items():
        print(f"   {model_type.value}: {model_name}")
    
    # 获取特定类型的模型
    print("\n2. 获取聊天模型:")
    chat_model = manager.get_model(ModelType.CHAT)
    print(f"   聊天模型类型: {type(chat_model).__name__}")
    
    print("\n3. 获取代码生成模型:")
    code_model = manager.get_model(ModelType.CODE_GENERATION)
    print(f"   代码生成模型类型: {type(code_model).__name__}")
    
    print("\n4. 获取图像识别模型:")
    image_model = manager.get_model(ModelType.IMAGE_RECOGNITION)
    print(f"   图像识别模型类型: {type(image_model).__name__}")
    
    print("\n5. 获取语音识别模型:")
    speech_model = manager.get_model(ModelType.SPEECH_RECOGNITION)
    print(f"   语音识别模型类型: {type(speech_model).__name__}")


def demo_model_evaluator():
    """演示模型评估器功能"""
    print("\n=== 模型评估器功能演示 ===")
    
    # 创建模型评估器
    evaluator = ModelEvaluator()
    
    # 模拟评估几个模型的性能
    print("1. 模拟模型性能评估:")
    
    # 创建虚拟模型性能数据
    from src.research_core.model_evaluator import ModelPerformance
    chat_perf = ModelPerformance("ChatOpenAI")
    chat_perf.add_performance_data(0.5, 0.95, False)  # 快速响应，高准确率
    chat_perf.add_performance_data(0.4, 0.92, False)
    chat_perf.add_performance_data(0.6, 0.96, False)
    
    code_perf = ModelPerformance("OpenAI")
    code_perf.add_performance_data(1.2, 0.85, False)  # 较慢响应，中等准确率
    code_perf.add_performance_data(1.0, 0.88, False)
    code_perf.add_performance_data(1.5, 0.82, True)   # 有一次错误
    
    # 添加到评估器
    evaluator.performance_data["ChatOpenAI"] = chat_perf
    evaluator.performance_data["OpenAI"] = code_perf
    
    # 显示性能数据
    print(f"   ChatOpenAI - 平均响应时间: {chat_perf.get_average_response_time():.2f}s, "
          f"平均准确率: {chat_perf.get_average_accuracy():.2f}, 错误率: {chat_perf.get_error_rate():.2f}")
    
    print(f"   OpenAI - 平均响应时间: {code_perf.get_average_response_time():.2f}s, "
          f"平均准确率: {code_perf.get_average_accuracy():.2f}, 错误率: {code_perf.get_error_rate():.2f}")
    
    # 根据不同需求选择最佳模型
    print("\n2. 根据不同需求选择最佳模型:")
    
    # 高准确率优先的任务
    high_accuracy_req = {
        "time_weight": 0.2,
        "accuracy_weight": 0.7,
        "error_weight": 0.1
    }
    best_model = evaluator.select_best_model("code_task", high_accuracy_req)
    print(f"   高准确率优先: {best_model}")
    
    # 快速响应优先的任务
    fast_response_req = {
        "time_weight": 0.7,
        "accuracy_weight": 0.2,
        "error_weight": 0.1
    }
    best_model = evaluator.select_best_model("chat_task", fast_response_req)
    print(f"   快速响应优先: {best_model}")
    
    # 平衡型任务
    balanced_req = {
        "time_weight": 0.4,
        "accuracy_weight": 0.5,
        "error_weight": 0.1
    }
    best_model = evaluator.select_best_model("general_task", balanced_req)
    print(f"   平衡型需求: {best_model}")


def demo_intelligent_model_selector():
    """演示智能模型选择器功能"""
    print("\n=== 智能模型选择器功能演示 ===")
    
    # 创建智能模型选择器
    selector = IntelligentModelSelector()
    
    print("1. 根据任务类型选择模型:")
    
    # 代码生成任务
    code_model = selector.select_model_for_task(
        "code_generation", 
        "生成一个Python函数来计算斐波那契数列",
        {
            "time_weight": 0.3,
            "accuracy_weight": 0.6,
            "error_weight": 0.1
        }
    )
    print(f"   代码生成任务选择的模型: {type(code_model).__name__}")
    
    # 聊天对话任务
    chat_model = selector.select_model_for_task(
        "chat_conversation",
        "回答用户关于人工智能的问题",
        {
            "time_weight": 0.5,
            "accuracy_weight": 0.4,
            "error_weight": 0.1
        }
    )
    print(f"   聊天对话任务选择的模型: {type(chat_model).__name__}")
    
    # 图像识别任务
    image_model = selector.select_model_for_task(
        "image_recognition",
        "识别图片中的物体和场景",
        {
            "time_weight": 0.4,
            "accuracy_weight": 0.5,
            "error_weight": 0.1
        }
    )
    print(f"   图像识别任务选择的模型: {type(image_model).__name__}")
    
    print("\n2. 显示模型管理器中的所有模型:")
    models = selector.model_manager.list_models()
    for model_type, model_name in models.items():
        print(f"   {model_type.value}: {model_name}")


async def main():
    """主演示函数"""
    print("多模型管理功能演示")
    print("=" * 50)
    
    # 演示模型管理器
    await demo_model_manager()
    
    # 演示模型评估器
    demo_model_evaluator()
    
    # 演示智能模型选择器
    demo_intelligent_model_selector()
    
    print("\n" + "=" * 50)
    print("演示完成!")


if __name__ == "__main__":
    asyncio.run(main())